package del4;

import java.util.*;

public class Division implements Enhed{
	private static boolean organisationLavet = false;
	private boolean erOrganisation = false;
	private Ansat leder;
	private String navn;
	private List<Ansat> ansatte = new ArrayList<Ansat>();
	private List<Division> afdelinger = new ArrayList<Division>();
	
	public Division(String navn){
		this.navn = navn;
	}

	public static Division opretOrganisation(String name){
		if(organisationLavet) return null;
		Division org = new Division(name);
		org.erOrganisation = true;
		organisationLavet = true;
		return org;
	}
	
	public String navn(){
		return navn;
	}
	
	public List<Ansat> ansatte(){
		return ansatte;
	}
	
	public List<Division> afdelinger(){
		return afdelinger;
	}
	
	public void tilfoejEnhed(Enhed enhed){
		if(enhed instanceof Ansat){
			for(Ansat ansat : ansatte){
				if(enhed.navn() == ansat.navn()) return;
			}
			ansatte.add((Ansat)enhed);
		}else if(enhed instanceof Division){
			if(((Division)enhed).erOrganisation()) return;
			for(Division afdeling : afdelinger){
				if(enhed.navn() == afdeling.navn()) return;
			}
			afdelinger.add((Division)enhed);
		}
	}
	
	public void tildelLeder(Ansat leder){
		tilfoejEnhed(leder);
		this.leder = leder;
	}
	
	public Ansat leder(){
		return leder;
	}
	
	public boolean erOrganisation(){
		return erOrganisation;
	}
	
	public void udskriv(){
		udskriv(0);
	}
	
	public void udskriv(int niveau){
		String indryk = "";
		for(int i = 0; i < niveau; i++) indryk += "\t";
		System.out.print((niveau > 0 ? "\n" : "") + indryk + (erOrganisation ? "Organisation[" : "Division[") + navn + ", leder=" + (leder != null ? leder.navn() : "ingen"));
		for(Division afdeling : afdelinger){
			afdeling.udskriv(niveau+1);
		}
		for(Ansat ansat : ansatte){
			System.out.print("\n" + indryk + "\tAnsat(" + ansat.navn() + ")");
		}
		System.out.print("]");
	}
	
	public static void main(String args[]){
		Division organisation = Division.opretOrganisation("ITU");
		organisation.tildelLeder(new Ansat("Mads Tofte"));
		
		Division studieAdm = new Division("Studieadministration");
		studieAdm.tildelLeder(new Ansat("Trine Eltang"));
		
		Division studieKontor = new Division("Studiekontor");
		studieKontor.tilfoejEnhed(new Ansat("M. Christensen"));
		studieAdm.tilfoejEnhed(studieKontor);
		
		Division eksamensKontor = new Division("Eksamenskontor");
		eksamensKontor.tilfoejEnhed(new Ansat("John Jensen"));
		studieAdm.tilfoejEnhed(eksamensKontor);
		
		organisation.tilfoejEnhed(studieAdm);
		
		Division itAfdeling = new Division("IT-Afdeling");
		itAfdeling.tildelLeder(new Ansat("Henrik Bidstrup"));
		itAfdeling.tilfoejEnhed(new Ansat("Anne Tvedebrink"));
		
		organisation.tilfoejEnhed(itAfdeling);
		
		organisation.udskriv();
	}
}
